﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace KPWeb.Data
{
    public class NieobecnosciUrlopy
    {


        public static Boolean JestUrlopWDniu(int osobaID, DateTime dt)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.KP_PlanyUrlopow.Where(a => a.OsobaID == osobaID && a.Date == dt).Count() != 0;
            }
        }

        public static Boolean SaUrlopyWRoku(int osobaID, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.KP_PlanyUrlopow.Where(a => a.OsobaID == osobaID && a.Year == year).Count() != 0;
            }
        }

        public static Boolean JestOsobaOkresRok(int osobaID, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.KP_PlanyUrlopowOkresy.Where(a => a.OsobaID == osobaID && a.Year == year).Count() != 0;
            }
        }
        public static int InsertPlanyUrlopow(int osobaID, DateTime dt, short year,byte stan)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    if (!JestUrlopWDniu(osobaID, dt))
                    {
                        KP_PlanyUrlopow e = new KP_PlanyUrlopow();
                        e.OsobaID = osobaID;
                        e.Date = dt.Date;
                        e.Year = year;
                        e.Stan = stan;
                      
                        db.KP_PlanyUrlopow.AddObject(e);
                        db.SaveChanges();
                    }

                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }

            }
        }
        public static int UpdatePlanyUrlopow(int osobaID,short year, byte stan1,byte stan2)
        {
         
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.KP_PlanyUrlopow.Where(a => a.OsobaID == osobaID && a.Year==year && a.Stan==stan1).ToArray();

                    foreach (KP_PlanyUrlopow e in wiz)
                    {
                        e.Stan = stan2;
                    }


                    db.SaveChanges();
                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }

            }
        }
        public static int DeletePlanyUrlopow(int osobaID, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {

                    if (SaUrlopyWRoku(osobaID, year))
                    {
                        var items = db.KP_PlanyUrlopow.Where(a => a.OsobaID == osobaID && a.Year == year);
                        foreach (KP_PlanyUrlopow item in items)
                        {
                            db.KP_PlanyUrlopow.DeleteObject(item);

                        }
                        db.SaveChanges();
                    }
                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }


            }
        }
        public static int InsertPlanyUrlopowOkresy(int osobaID, string okresNazwa, short liczbaDni, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    if (!JestOsobaOkresRok(osobaID, year))
                    {
                        KP_PlanyUrlopowOkresy e = new KP_PlanyUrlopowOkresy();
                        e.OsobaID = osobaID;
                        e.OkresyNazwa = okresNazwa;
                        e.LiczbaDni = liczbaDni;
                        e.PlanUrlopowID = null;
                        e.Year = year;
                        e.active = "t";
                        
                        db.KP_PlanyUrlopowOkresy.AddObject(e);
                        db.SaveChanges();
                    }

                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }

            }
        }
        public static int DeletePlanyUrlopowOkresy(int osobaID, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {

                    if (JestOsobaOkresRok(osobaID, year))
                    {
                        var items = db.KP_PlanyUrlopowOkresy.Where(a => a.OsobaID == osobaID && a.Year == year);
                        foreach (KP_PlanyUrlopowOkresy item in items)
                        {
                            db.KP_PlanyUrlopowOkresy.DeleteObject(item);

                        }
                        db.SaveChanges();
                    }
                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }


            }
        }
     //////////// Nieobecnosci
        //public static IEnumerable<vLex_TypNieobecnosciUrlopu> GetListaTypNieobecnosciUrlopu()
        //{
        //    using (DBContainer db = new DBContainer())
        //    {
        //        return (db.vLex_TypNieobecnosciUrlopu.OrderBy(a=>a.TypNieobecnosciUrlopuID).ToArray());
        //    }
        //}

        public static IEnumerable<KP_Nieobecnosci> GetNieobecnosciUrlopy(int OsobaID, short Year)
        {
            using (DBContainer db = new DBContainer())
            {

                //.OrderBy(a => a.NumerStrony).OrderBy(a => a.PozycjaNaStronie).OrderBy(a => a.NazwiskoImie)
                return (db.KP_Nieobecnosci.Where(a => a.OsobaID == OsobaID && a.Year == Year).ToArray());
            }
        }

        public static int GetNieobecnosciUrlopyWypoczynkowy(int OsobaID, short Year)
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.KP_Nieobecnosci.Where(a => a.OsobaID == OsobaID && a.Year == Year &&
                    (a.TypNieobecnosciUrlopu==1 ||a.TypNieobecnosciUrlopu==2) ).Count());
            }
        }
        public static int GetNieobecnosciUrlopyInne(int OsobaID, short Year)
        {
            using (DBContainer db = new DBContainer())
            {
                return (db.KP_Nieobecnosci.Where(a => a.OsobaID == OsobaID && a.Year == Year &&
                    (a.TypNieobecnosciUrlopu != 1 && a.TypNieobecnosciUrlopu != 2)).Count());
            }
        }
        public static Boolean JestNieobecnoscWDniu(int osobaID, DateTime dt)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.vKP_Nieobecnosci.Where(a => a.OsobaID == osobaID && a.Date == dt).Count() != 0;
            }
        }

        public static Boolean SaNieobecnosciWRoku(int osobaID, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                return db.vKP_Nieobecnosci.Where(a => a.OsobaID ==osobaID && a.Year == year).Count() != 0;
            }
        }


        //public static int InsertNieobecnosc(int osobaID, DateTime dt, short year, byte typNieobecnosciUrlopu,byte stan)
        //{
        //    using (DBContainer db = new DBContainer())
        //    {
        //        try
        //        {
        //            if (!JestNieobecnoscWDniu(osobaID, dt))
        //            {
        //                KP_Nieobecnosci e = new KP_Nieobecnosci();
        //                e.OsobaID = osobaID;
        //                e.Date = dt.Date;
        //                e.Year = year;
        //                e.TypNieobecnosciUrlopu = typNieobecnosciUrlopu;
        //                e.Stan = stan;
        //                e.active = "t";
        //                db.KP_Nieobecnosci.AddObject(e);
        //                db.SaveChanges();
        //            }

        //            return 0;
        //        }
        //        catch (Exception e)
        //        {
        //            return 1;
        //        }

        //    }
        //}

        public static int DeleteNieobecnosci(int osobaID, DateTime dt, short year)
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {

                    if (SaUrlopyWRoku(osobaID, year))
                    {
                        var items = db.KP_Nieobecnosci.Where(a => a.OsobaID == osobaID && a.Year == year && a.Date == dt);
                        foreach (KP_Nieobecnosci item in items)
                        {
                            db.KP_Nieobecnosci.DeleteObject(item);

                        }
                        db.SaveChanges();
                    }
                    return 0;
                }
                catch (Exception e)
                {
                    return 1;
                }


            }
        }


    }
}